____ _ _ _ _
| _ \ ___ | |_ (_) _ __ ___ __| | (_) __ _
| |_) | / _ \ | __| | | | '_ \ / _ \ / _| | | | / _ |
| _ < | __/ | |_ | | | |_) | | __/ | (_| | | | | (_| |
|_| \_\ \___| \__| |_| | .__/ \___| \__,_| |_| \__,_|
|_|
- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b
Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―
Jakarta XML Binding
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
top
Jakarta XML Binding (JAXB; frΓΌher Java Architecture for XML Binding) ist eine Programmschnittstelle in Java, die es ermΓΆglicht, Daten aus einer XML-Schema-Instanz heraus automatisch an Java-Klassen zu binden und diese Java-Klassen aus einem XML-Schema heraus zu generieren. Diesen Vorgang nennt man XML-Datenbindung.
JAXB 2.0 ist Teil der Java Platform, Enterprise Edition 5.0 und der Standard Edition 6.0. Es ist ein Teil der Web Services Interoperability Technology (WSIT). JAXB 1.0 wurde vom Java Community Process als JSR 31 entwickelt, JAXB 2.0 als JSR 222. Die Referenzimplementierung von JAXB ist Teil des Metro-Projektes der GlassFish-Community.cite-ref-2[2]
Contents
β’ Datenbindung
β’ Alternativen
β’ Weblinks
β’ Einzelnachweise
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
Objekt-zu-XML-Transformation
Marshalling generiert bei JAXB aus einem Baum von Java-Objekten ein XML-Dokument. Dies ist eine spezielle Form der Serialisierung. AnwendungsfΓ€lle fΓΌr diese Umwandlung sind beispielsweise Persistierung in einer Datei oder Γbertragung ΓΌber ein Netzwerk. Der umgekehrte Weg heiΓt Unmarshalling β eine spezielle Form der Deserialisierung. Hierbei wird aus einem gegebenen XML-Dokument wieder ein Baum von Java-Objekten generiert. Um eine solche Umwandlung eindeutig zu realisieren, verwendet man XML-Schemata. Die verwendeten XML-Dokumente gehorchen den im Schema definierten Regeln. Man nennt sie auch Schema-Instanzen.
Datenbindung
Der Begriff der Datenbindung innerhalb dieses Konzeptes beschreibt einen Satz von Regeln, welche die Abbildung/ReprΓ€sentation des XML-Schemas gegenΓΌber den zu generierenden Java-Objekten bestimmen. Auf diese vorgegebenen Regeln kann durch Binding Customizations Einfluss genommen werden. Dies kann durch Inline-Notizen im XML-Schema oder durch eine gesonderte Datei geschehen, die dann dem Binding Compiler mit ΓΌbergeben wird. Dieser hat dann die Aufgabe, das XML-Schema auf eine entsprechende Java-Objekt-Struktur abzubilden.
Die Tabelle unten listet die Abbildung der XML-Schema-Datentypen (XSD) zu den entsprechenden Datentypen in Java in JAXB auf.cite-ref-5[5]
| XML-Schematyp | Java-Datentyp |
|---|---|
| xsd:anySimpleType [ 6 ] | java.lang.Object |
| xsd:anySimpleType [ 7 ] | java.lang.String |
| xsd:base64Binary | byte[] |
| xsd:boolean | boolean |
| xsd:byte | byte |
| xsd:date | javax.xml.datatype.XMLGregorianCalendar |
| xsd:dateTime | javax.xml.datatype.XMLGregorianCalendar |
| xsd:decimal | java.math.BigDecimal |
| xsd:double | double |
| xsd:duration | javax.xml.datatype.Duration |
| xsd:float | float |
| xsd:g | javax.xml.datatype.XMLGregorianCalendar |
| xsd:hexBinary | byte[] |
| xsd:int | int |
| xsd:integer | java.math.BigInteger |
| xsd:long | long |
| xsd:NOTATION | javax.xml.namespace.QName |
| xsd:positiveInteger | java.math.BigInteger |
| xsd:QName | javax.xml.namespace.QName |
| xsd:short | short |
| xsd:string | java.lang.String |
| xsd:time | javax.xml.datatype.XMLGregorianCalendar |
| xsd:unsignedByte | short |
| xsd:unsignedInt | long |
| xsd:unsignedLong | java.math.BigDecimal |
| xsd:unsignedShort | int |
JAXB Binding Framework
Das JAXB Binding Framework besteht im Kern aus drei Java-Paketen:
β’ jakarta.xml.bind
β’ jakarta.xml.bind.util
β’ jakarta.xml.bind.helpers
Die letzten beiden Pakete liefern unterstΓΌtzende Funktionen fΓΌr das Hauptpaket jakarta.xml.bind.
Die Klasse JAXBContext aus jakarta.xml.bind stellt den Eingangspunkt zur Nutzung des Frameworks innerhalb einer eigenen Java-Anwendung dar.
JAXBContext jc = JAXBContext.newInstance("com.acme.foo:com.acme.bar");
Unmarshaller u = jc.createUnmarshaller();
FooObject fooObj = (FooObject) u.unmarshal(new File("foo.xml"));
BarObject barObj = (BarObject) u.unmarshal(new File("bar.xml"));
Aus dem erstellten Kontext-Objekt wird nun ein βUnmarshallerβ generiert. Mit diesem kΓΆnnen dann die XML-Daten auf Java-Objekte abgebildet werden.
Seit JAXB 2.1 stellt die Hilfsklasse JAXB aus jakarta.xml.bind einen vereinfachten Weg dar, dies zu erreichen. Die Erzeugung des Kontextes und des Unmarshallers wird durch diese automatisch intern vorgenommen, was gerade Einsteigern die Nutzung von JAXB erheblich erleichtert. Nachteilig hierbei ist jedoch, dass diese Objekte bei jedem Aufruf neu erzeugt werden, sodass in einigen AnwendungsfΓ€llen ein Geschwindigkeitsnachteil resultiert:
FooObject fooObj = JAXB.unmarshal(new File("foo.xml"), FooObject.class);
BarObject barObj = JAXB.unmarshal(new File("bar.xml"), BarObject.class);
Um die Datenobjekte wieder zurΓΌck in die XML-Form zu bringen, wird ein βMarshallerβ aus dem Kontext-Objekt erzeugt. Ihm werden das Datenobjekt und ein Streamobjekt (java.io.OutputStream oder java.io.Writer) ΓΌbergeben.
Marshaller m = jc.createMarshaller();
m.marshal(fooObj, System.out);
Auch an dieser Stelle erleichtert JAXB 2.1 die Programmierung durch die Hilfsklasse JAXB, welche den Marshaller intern erzeugt und somit zu kΓΌrzerem Quellcode fΓΌhrt:
JAXB.marshal(fooObj, System.out);
Alternativen
Die folgenden Java XML Binding Frameworks kΓΆnnen als Alternative zu JAXB verwendet werden:
β’ Apache XMLBeans
β’ Castor (Framework)
β’ JiBX
β’ CookXML
β’ XStream
β’ Apache Commons Betwixt
β’ Simple XML Serialization
Weblinks
β’ JAXB-Referenzimplementierung β Referenzimplementierung und JAXB-Spezifikation
β’ JAXB-Tutorial
β’ JAXB-Kapitel aus dem Java Web Services Tutorial von Sun/Oracle
β’ Γberblick ΓΌber JAXB. Sun/Oracle
β’ Deutschsprachiges Tutorial. In: Java ist auch eine Insel
β’ Die Hilfsklasse JAXB. jakarta.ee
Einzelnachweise
cite-note-dedffa3fd0b6437a-11. Release 4.0.5. 15. MΓ€rz 2024 (abgerufen am 22. MΓ€rz 2024).
cite-note-22. β JAXB Reference Implementation (Memento des Originals vom 11. Juli 2007 im Internet Archive) Info: Der Archivlink wurde automatisch eingesetzt und noch nicht geprΓΌft. Bitte prΓΌfe Original- und Archivlink gemÀà Anleitung und entferne dann diesen Hinweis.@1@2Vorlage:Webachiv/IABot/jaxb.dev.java.net
cite-note-33. β Java SE 9 ( JSR 379) Final Release Specification: APIs proposed for removal. Abgerufen am 14. Mai 2019 (englisch).
cite-note-44. β JEP 320: Remove the Java EE and CORBA Modules. Abgerufen am 14. Mai 2019 (englisch).
cite-note-55. β Using JAXB Data Binding: Standard Data Type Mapping. Abgerufen am 25. April 2014.
cite-note-62. for xsd:element of this type
cite-note-73. for xsd:attribute of this type